diff --git a/system/libraries/User_agent.php b/system/libraries/User_agent.php
index 8c63924..2116238 100644
--- a/system/libraries/User_agent.php
+++ b/system/libraries/User_agent.php
@@ -43,375 +43,6 @@
 	var $moble		= '';
 	var $robot		= '';
 
-	var $platforms = array (
-							'windows nt 6.0'	=> 'Windows Longhorn',
-							'windows nt 5.2'	=> 'Windows 2003',
-							'windows nt 5.0'	=> 'Windows 2000',
-							'windows nt 5.1'	=> 'Windows XP',
-							'windows nt 4.0'	=> 'Windows NT 4.0',
-							'winnt4.0'			=> 'Windows NT 4.0',
-							'winnt 4.0'			=> 'Windows NT',
-							'winnt'				=> 'Windows NT',
-							'windows 98'		=> 'Windows 98',
-							'win98'				=> 'Windows 98',
-							'windows 95'		=> 'Windows 95',
-							'win95'				=> 'Windows 95',
-							'windows'			=> 'Unknown Windows OS',
-							'os x'				=> 'Mac OS X',
-							'ppc mac'			=> 'Power PC Mac',
-							'freebsd'			=> 'FreeBSD',
-							'ppc'				=> 'Macintosh',
-							'linux'				=> 'Linux',
-							'debian'			=> 'Debian',
-							'sunos'				=> 'Sun Solaris',
-							'beos'				=> 'BeOS',
-							'apachebench'		=> 'ApacheBench',
-							'aix'				=> 'AIX',
-							'irix'				=> 'Irix',
-							'osf'				=> 'DEC OSF',
-							'hp-ux'				=> 'HP-UX',
-							'netbsd'			=> 'NetBSD',
-							'bsdi'				=> 'BSDi',
-							'openbsd'			=> 'OpenBSD',
-							'gnu'				=> 'GNU/Linux',
-							'unix'				=> 'Unknown Unix OS'
-						);
-
-	var $browsers = array(
-							'Opera'				=> 'Opera',
-							'MSIE'				=> 'Internet Explorer',
-							'Internet Explorer'	=> 'Internet Explorer',
-							'Shiira'			=> 'Shiira',
-							'Firefox'			=> 'Firefox',
-							'Chimera'			=> 'Chimera',
-							'Phoenix'			=> 'Phoenix',
-							'Firebird'			=> 'Firebird',
-							'Camino'			=> 'Camino',
-							'Netscape'			=> 'Netscape',
-							'OmniWeb'			=> 'OmniWeb',
-							'Mozilla'			=> 'Mozilla',
-							'Safari'			=> 'Safari',
-							'Konqueror'			=> 'Konqueror',
-							'icab'				=> 'iCab',
-							'Lynx'				=> 'Lynx',
-							'Links'				=> 'Links',
-							'hotjava'			=> 'HotJava',
-							'amaya'				=> 'Amaya',
-							'IBrowse'			=> 'IBrowse'
-						);
-
-	var $mobiles = array(
-							'mobileexplorer'	=> 'Mobile Explorer',
-							'openwave'			=> 'Open Wave',
-							'opera mini'		=> 'Opera Mini',
-							'operamini'			=> 'Opera Mini',
-							'elaine'			=> 'Palm',
-							'palmsource'		=> 'Palm',
-							'digital paths'		=> 'Palm',
-							'avantgo'			=> 'Avantgo',
-							'xiino'				=> 'Xiino',
-							'palmscape'			=> 'Palmscape',
-							'nokia'				=> 'Nokia',
-							'ericsson'			=> 'Ericsson',
-							'blackBerry'		=> 'BlackBerry',
-							'motorola'			=> 'Motorola'
-						);	
-
-	var $robots = array(
-			
-							'googlebot'					=> 'Googlebot',
-							'msnbot'					=> 'MSNBot',
-							'slurp'						=> 'Inktomi Slurp',
-							'yahoo'						=> 'Yahoo',
-							'askjeeves'					=> 'AskJeeves',
-							'fastcrawler'				=> 'FastCrawler',
-							'infoseek'					=> 'InfoSeek Robot 1.0',
-							'lycos'						=> 'Lycos',
-							'abcdatos'					=> 'ABCdatos BotLink',
-							'Acme.Spider'				=> 'Acme.Spider',
-							'ahoythehomepagefinder'		=> 'Ahoy! The Homepage Finder',
-							'Alkaline'					=> 'Alkaline',
-							'anthill'					=> 'Anthill',
-							'appie'						=> 'Walhello appie',
-							'arachnophilia'				=> 'Arachnophilia',
-							'arale'						=> 'Arale',
-							'araneo'					=> 'Araneo',
-							'araybot'					=> 'AraybOt',
-							'architext'					=> 'ArchitextSpider',
-							'aretha'					=> 'Aretha',
-							'ariadne'					=> 'ARIADNE',
-							'arks'						=> 'arks',
-							'aspider'					=> 'ASpider (Associative Spider)',
-							'atn.txt'					=> 'ATN Worldwide',
-							'atomz'						=> 'Atomz.com Search Robot',
-							'auresys'					=> 'AURESYS',
-							'backrub'					=> 'BackRub',
-							'bbot'						=> 'BBot',
-							'bigbrother'				=> 'Big Brother',
-							'bjaaland'					=> 'Bjaaland',
-							'blackwidow'				=> 'BlackWidow',
-							'blindekuh'					=> 'Die Blinde Kuh',
-							'Bloodhound'				=> 'Bloodhound',
-							'borg-bot'					=> 'Borg-Bot',
-							'boxseabot'					=> 'BoxSeaBot',
-							'brightnet'					=> 'bright.net caching robot',
-							'bspider'					=> 'BSpider',
-							'cactvschemistryspider'		=> 'CACTVS Chemistry Spider',
-							'calif'						=> 'Calif',
-							'cassandra'					=> 'Cassandra',
-							'cgireader'					=> 'Digimarc Marcspider/CGI',
-							'checkbot'					=> 'Checkbot',
-							'christcrawler'				=> 'ChristCrawler.com',
-							'churl'						=> 'churl',
-							'cienciaficcion'			=> 'cIeNcIaFiCcIoN.nEt',
-							'cmc'						=> 'CMC/0.01',
-							'Collective'				=> 'Collective',
-							'combine'					=> 'Combine System',
-							'confuzzledbot'				=> 'ConfuzzledBot',
-							'coolbot'					=> 'CoolBot',
-							'core'						=> 'Web Core / Roots',
-							'cosmos'					=> 'XYLEME Robot',
-							'cruiser'					=> 'Internet Cruiser Robot',
-							'cusco'						=> 'Cusco',
-							'cyberspyder'				=> 'CyberSpyder Link Test',
-							'cydralspider'				=> 'CydralSpider',
-							'desertrealm'				=> 'Desert Realm Spider',
-							'deweb'						=> 'DeWeb(c) Katalog/Index',
-							'dienstspider'				=> 'DienstSpider',
-							'digger'					=> 'Digger',
-							'diibot'					=> 'Digital Integrity Robot',
-							'directhit'					=> 'Direct Hit Grabber',
-							'dnabot'					=> 'DNAbot',
-							'download_express'			=> 'DownLoad Express',
-							'dragonbot'					=> 'DragonBot',
-							'e-collector'				=> 'e-collector',
-							'ebiness'					=> 'EbiNess',
-							'eit'						=> 'EIT Link Verifier Robot',
-							'elfinbot'					=> 'ELFINBOT',
-							'emacs'						=> 'Emacs-w3 Search Engine',
-							'emcspider'					=> 'ananzi',
-							'esculapio'					=> 'esculapio',
-							'esther'					=> 'Esther',
-							'evliyacelebi'				=> 'Evliya Celebi',
-							'nzexplorer'				=> 'nzexplorer',
-							'fdse'						=> 'Fluid Dynamics Search Engine robot',
-							'felix'						=> 'Felix IDE',
-							'ferret'					=> 'Wild Ferret Web Hopper #1, #2, #3',
-							'fetchrover'				=> 'FetchRover',
-							'fido'						=> 'fido',
-							'finnish'					=> 'Hämähäkki',
-							'fireball'					=> 'KIT-Fireball',
-							'fish'						=> 'Fish search',
-							'fouineur'					=> 'Fouineur',
-							'francoroute'				=> 'Robot Francoroute',
-							'freecrawl'					=> 'Freecrawl',
-							'funnelweb'					=> 'FunnelWeb',
-							'gama'						=> 'gammaSpider, FocusedCrawler',
-							'gazz'						=> 'gazz',
-							'gcreep'					=> 'GCreep',
-							'getbot'					=> 'GetBot',
-							'geturl'					=> 'GetURL',
-							'golem'						=> 'Golem',
-							'grapnel'					=> 'Grapnel/0.01 Experiment',
-							'griffon'					=> 'Griffon                                                               ',
-							'gromit'					=> 'Gromit',
-							'gulliver'					=> 'Northern Light Gulliver',
-							'gulperbot'					=> 'Gulper Bot',
-							'hambot'					=> 'HamBot',
-							'harvest'					=> 'Harvest',
-							'havindex'					=> 'havIndex',
-							'hi'						=> 'HI (HTML Index) Search',
-							'hometown'					=> 'Hometown Spider Pro',
-							'wired-digital'				=> 'Wired Digital',
-							'htdig'						=> 'ht://Dig',
-							'htmlgobble'				=> 'HTMLgobble',
-							'hyperdecontextualizer'		=> 'Hyper-Decontextualizer',
-							'iajabot'					=> 'iajaBot',
-							'ibm'						=> 'IBM_Planetwide',
-							'iconoclast'				=> 'Popular Iconoclast',
-							'Ilse'						=> 'Ingrid',
-							'imagelock'					=> 'Imagelock ',
-							'incywincy'					=> 'IncyWincy',
-							'informant'					=> 'Informant',
-							'infoseeksidewinder'		=> 'Infoseek Sidewinder',
-							'infospider'				=> 'InfoSpiders',
-							'inspectorwww'				=> 'Inspector Web',
-							'intelliagent'				=> 'IntelliAgent',
-							'irobot'					=> 'I, Robot',
-							'iron33'					=> 'Iron33',
-							'israelisearch'				=> 'Israeli-search',
-							'javabee'					=> 'JavaBee',
-							'JBot'						=> 'JBot Java Web Robot',
-							'jcrawler'					=> 'JCrawler',
-							'jobo'						=> 'JoBo Java Web Robot',
-							'jobot'						=> 'Jobot',
-							'joebot'					=> 'JoeBot',
-							'jubii'						=> 'The Jubii Indexing Robot',
-							'jumpstation'				=> 'JumpStation',
-							'kapsi'						=> 'image.kapsi.net',
-							'katipo'					=> 'Katipo',
-							'kdd'						=> 'KDD-Explorer',
-							'kilroy'					=> 'Kilroy',
-							'ko_yappo_robot'			=> 'KO_Yappo_Robot',
-							'labelgrabber.txt'			=> 'LabelGrabber',
-							'larbin'					=> 'larbin',
-							'legs'						=> 'legs',
-							'linkidator'				=> 'Link Validator',
-							'linkscan'					=> 'LinkScan',
-							'linkwalker'				=> 'LinkWalker',
-							'lockon'					=> 'Lockon',
-							'logo_gif'					=> 'logo.gif Crawler',
-							'magpie'					=> 'Magpie',
-							'marvin'					=> 'marvin/infoseek',
-							'mattie'					=> 'Mattie',
-							'mediafox'					=> 'MediaFox',
-							'merzscope'					=> 'MerzScope',
-							'meshexplorer'				=> 'NEC-MeshExplorer',
-							'MindCrawler'				=> 'MindCrawler',
-							'mnogosearch'				=> 'mnoGoSearch search engine software',
-							'moget'						=> 'moget',
-							'momspider'					=> 'MOMspider',
-							'monster'					=> 'Monster',
-							'motor'						=> 'Motor',
-							'muncher'					=> 'Muncher',
-							'muninn'					=> 'Muninn',
-							'muscatferret'				=> 'Muscat Ferret',
-							'mwdsearch'					=> 'Mwd.Search',
-							'myweb'						=> 'Internet Shinchakubin',
-							'NDSpider'					=> 'NDSpider',
-							'netcarta'					=> 'NetCarta WebMap Engine',
-							'netmechanic'				=> 'NetMechanic',
-							'netscoop'					=> 'NetScoop',
-							'newscan-online'			=> 'newscan-online',
-							'nhse'						=> 'NHSE Web Forager',
-							'nomad'						=> 'Nomad',
-							'northstar'					=> 'The NorthStar Robot',
-							'objectssearch'				=> 'ObjectsSearch',
-							'occam'						=> 'Occam',
-							'octopus'					=> 'HKU WWW Octopus',
-							'OntoSpider'				=> 'OntoSpider',
-							'openfind'					=> 'Openfind data gatherer',
-							'orb_search'				=> 'Orb Search',
-							'packrat'					=> 'Pack Rat',
-							'pageboy'					=> 'PageBoy',
-							'parasite'					=> 'ParaSite',
-							'patric'					=> 'Patric',
-							'pegasus'					=> 'pegasus',
-							'perignator'				=> 'The Peregrinator',
-							'perlcrawler'				=> 'PerlCrawler 1.0',
-							'phantom'					=> 'Phantom',
-							'phpdig'					=> 'PhpDig',
-							'pitkow'					=> 'html_analyzer',
-							'pjspider'					=> 'Portal Juice Spider',
-							'pka'						=> 'PGP Key Agent',
-							'poppi'						=> 'Poppi',
-							'portalb'					=> 'PortalB Spider',
-							'psbot'						=> 'psbot',
-							'Puu'						=> 'GetterroboPlus Puu',
-							'python'					=> 'The Python Robot',
-							'raven '					=> 'Raven Search',
-							'rbse'						=> 'RBSE Spider',
-							'resumerobot'				=> 'Resume Robot',
-							'rhcs'						=> 'RoadHouse Crawling System',
-							'rixbot'					=> 'RixBot',
-							'roadrunner'				=> 'Road Runner: The ImageScape Robot',
-							'robbie'					=> 'Robbie the Robot',
-							'robi'						=> 'ComputingSite Robi/1.0',
-							'robocrawl'					=> 'RoboCrawl Spider',
-							'robofox'					=> 'RoboFox',
-							'robozilla'					=> 'Robozilla',
-							'roverbot'					=> 'Roverbot',
-							'rules'						=> 'RuLeS',
-							'safetynetrobot'			=> 'SafetyNet Robot',
-							'scooter'					=> 'Scooter',
-							'search_au'					=> 'Search.Aus-AU.COM',
-							'search-info'				=> 'Sleek',
-							'searchprocess'				=> 'SearchProcess',
-							'senrigan'					=> 'Senrigan',
-							'sgscout'					=> 'SG-Scout',
-							'shaggy'					=> 'ShagSeeker',
-							'sift'						=> 'Sift',
-							'simbot'					=> 'Simmany Robot Ver1.0',
-							'site-valet'				=> 'Site Valet',
-							'sitetech'					=> 'SiteTech-Rover',
-							'skymob'					=> 'Skymob.com',
-							'slcrawler'					=> 'SLCrawler',
-							'smartspider'				=> 'Smart Spider',
-							'snooper'					=> 'Snooper',
-							'solbot'					=> 'Solbot',
-							'speedy'					=> 'Speedy Spider',
-							'spider_monkey'				=> 'spider_monkey',
-							'spiderbot'					=> 'SpiderBot',
-							'spiderline'				=> 'Spiderline Crawler',
-							'spiderman'					=> 'SpiderMan',
-							'spiderview'				=> 'SpiderView(tm)',
-							'spry'						=> 'Spry Wizard Robot',
-							'ssearcher'					=> 'Site Searcher',
-							'suke'						=> 'Suke',
-							'suntek'					=> 'suntek search engine',
-							'sven'						=> 'Sven',
-							'sygol'						=> 'Sygol ',
-							'tach_bw'					=> 'TACH Black Widow',
-							'tarantula'					=> 'Tarantula',
-							'tarspider'					=> 'tarspider',
-							'tcl'						=> 'Tcl W3 Robot',
-							'techbot'					=> 'TechBOT',
-							'templeton'					=> 'Templeton',
-							'titin'						=> 'TitIn',
-							'titan'						=> 'TITAN',
-							'tkwww'						=> 'The TkWWW Robot',
-							'tlspider'					=> 'TLSpider',
-							'ucsd'						=> 'UCSD Crawl',
-							'udmsearch'					=> 'UdmSearch',
-							'ultraseek'					=> 'Ultraseek',
-							'uptimebot'					=> 'UptimeBot',
-							'urlck'						=> 'URL Check',
-							'valkyrie'					=> 'Valkyrie',
-							'verticrawl'				=> 'Verticrawl',
-							'victoria'					=> 'Victoria',
-							'visionsearch'				=> 'vision-search',
-							'voidbot'					=> 'void-bot',
-							'voyager'					=> 'Voyager',
-							'vwbot'						=> 'VWbot',
-							'w3index'					=> 'The NWI Robot',
-							'w3m2'						=> 'W3M2',
-							'wallpaper'					=> 'WallPaper (alias crawlpaper)',
-							'wanderer'					=> 'the World Wide Web Wanderer',
-							'wapspider'					=> 'w@pSpider by wap4.com',
-							'webbandit'					=> 'WebBandit Web Spider',
-							'webcatcher'				=> 'WebCatcher',
-							'webcopy'					=> 'WebCopy',
-							'webfetcher'				=> 'webfetcher',
-							'webfoot'					=> 'The Webfoot Robot',
-							'webinator'					=> 'Webinator',
-							'weblayers'					=> 'weblayers',
-							'weblinker'					=> 'WebLinker',
-							'webmirror'					=> 'WebMirror',
-							'webmoose'					=> 'The Web Moose',
-							'webquest'					=> 'WebQuest',
-							'webreader'					=> 'Digimarc MarcSpider',
-							'webreaper'					=> 'WebReaper',
-							'webs'						=> 'webs',
-							'websnarf'					=> 'Websnarf',
-							'webspider'					=> 'WebSpider',
-							'webvac'					=> 'WebVac',
-							'webwalk'					=> 'webwalk',
-							'webwalker'					=> 'WebWalker',
-							'webwatch'					=> 'WebWatch',
-							'wget'						=> 'Wget',
-							'whatuseek'					=> 'whatUseek Winona',
-							'whowhere'					=> 'WhoWhere Robot',
-							'wlm'						=> 'Weblog Monitor',
-							'wmir'						=> 'w3mir',
-							'wolp'						=> 'WebStolperer',
-							'wombat'					=> 'The Web Wombat ',
-							'worm'						=> 'The World Wide Web Worm',
-							'wwwc'						=> 'WWWC Ver 0.2.5',
-							'wz101'						=> 'WebZinger',
-							'xget'						=> 'XGET',				
-						);	
-
-
 	
 	/**
 	 * Constructor
@@ -430,9 +61,62 @@
 		
 		if ( ! is_null($this->agent))
 		{
-			$this->_compile_data();
+			if ($this->_load_agent_file())
+			{
+				$this->_compile_data();
+			}
 		}
 	}
+
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Compile the User Agent Data
+	 *
+	 * @access	private
+	 * @return	bool
+	 */		
+	function _load_agent_file()
+	{
+		if ( ! @include(APPPATH.'config/user_agent'.EXT))
+		{
+			return FALSE;
+		}
+		
+		$return = FALSE;
+		
+		if (isset($platforms))
+		{
+			$this->platforms = $platforms;
+			unset($platforms);
+			$return = TRUE;
+		}
+
+		if (isset($browsers))
+		{
+			$this->browsers = $browsers;
+			unset($browsers);
+			$return = TRUE;
+		}
+
+		if (isset($mobiles))
+		{
+			$this->browsers = $mobiles;
+			unset($mobiles);
+			$return = TRUE;
+		}
+		
+		if (isset($robots))
+		{
+			$this->robots = $robots;
+			unset($robots);
+			$return = TRUE;
+		}
+		
+		
+		return $return;
+	}
 	
 	// --------------------------------------------------------------------
 	
@@ -465,15 +149,17 @@
 	 */		
 	function _set_platform()
 	{
-		foreach ($this->platforms as $key => $val) 
+		if (is_array($this->platforms) AND count($this->platforms) > 0)
 		{
-			if (preg_match("|$key|i", $this->agent)) 
+			foreach ($this->platforms as $key => $val) 
 			{
-				$this->platform = $val;
-				return TRUE;
+				if (preg_match("|".preg_quote($key)."|i", $this->agent)) 
+				{
+					$this->platform = $val;
+					return TRUE;
+				}
 			}
 		}
-	
 		$this->platform = 'Unknown Platform';
 	}
 
@@ -487,17 +173,19 @@
 	 */		
 	function _set_browser()
 	{
-		foreach ($this->browsers as $key => $val) 
-		{		
-			if (preg_match("|".$key.".*?([0-9\.]+)|i", $this->agent, $match)) 
-			{
-				$this->is_browser = TRUE;
-				$this->version = $match[1];
-				$this->browser = $val;
-				return TRUE;
+		if (is_array($this->browsers) AND count($this->browsers) > 0)
+		{
+			foreach ($this->browsers as $key => $val) 
+			{		
+				if (preg_match("|".preg_quote($key).".*?([0-9\.]+)|i", $this->agent, $match)) 
+				{
+					$this->is_browser = TRUE;
+					$this->version = $match[1];
+					$this->browser = $val;
+					return TRUE;
+				}
 			}
 		}
-		
 		return FALSE;
 	}
 			
@@ -511,39 +199,43 @@
 	 */		
 	function _set_robot()
 	{
-		foreach ($this->robots as $key => $val) 
-		{
-			if (preg_match("|$key|i", $this->agent)) 
+		if (is_array($this->robots) AND count($this->robots) > 0)
+		{		
+			foreach ($this->robots as $key => $val) 
 			{
-				$this->is_robot = TRUE;
-				$this->robot = $val;
-				return TRUE;
+				if (preg_match("|".preg_quote($key)."|i", $this->agent)) 
+				{
+					$this->is_robot = TRUE;
+					$this->robot = $val;
+					return TRUE;
+				}
 			}
 		}
-	
 		return FALSE;
 	}
 
 	// --------------------------------------------------------------------
 	
 	/**
-	 * Set the Mobile Devise
+	 * Set the Mobile Device
 	 *
 	 * @access	private
 	 * @return	bool
 	 */		
 	function _set_mobile()
 	{
-		foreach ($this->mobiles as $key => $val) 
-		{
-			if (FALSE !== (strpos(strtolower($this->agent), $key)))
+		if (is_array($this->mobiles) AND count($this->mobiles) > 0)
+		{		
+			foreach ($this->mobiles as $key => $val) 
 			{
-				$this->is_mobile = TRUE;
-				$this->mobile = $val;
-				return TRUE;
+				if (FALSE !== (strpos(strtolower($this->agent), $key)))
+				{
+					$this->is_mobile = TRUE;
+					$this->mobile = $val;
+					return TRUE;
+				}
 			}
-		}
-	
+		}	
 		return FALSE;
 	}
 	
@@ -559,7 +251,7 @@
 	{
 		if ((count($this->languages) == 0) AND isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) AND $_SERVER['HTTP_ACCEPT_LANGUAGE'] != '')
 		{
-			$languages = preg_replace('/(;q=.+)/i', '', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
+			$languages = preg_replace('/(;q=.+)/i', '', trim($_SERVER['HTTP_ACCEPT_LANGUAGE']));
 			
 			$this->languages = explode(',', $languages);
 		}
@@ -582,7 +274,7 @@
 	{	
 		if ((count($this->charsets) == 0) AND isset($_SERVER['HTTP_ACCEPT_CHARSET']) AND $_SERVER['HTTP_ACCEPT_CHARSET'] != '')
 		{
-			$charsets = preg_replace('/(;q=.+)/i', '', $_SERVER['HTTP_ACCEPT_CHARSET']);
+			$charsets = preg_replace('/(;q=.+)/i', '', trim($_SERVER['HTTP_ACCEPT_CHARSET']));
 			
 			$this->charsets = explode(',', $charsets);
 		}
@@ -712,7 +404,7 @@
 	// --------------------------------------------------------------------
 	
 	/**
-	 * Get the Mobile Devise
+	 * Get the Mobile Device
 	 *
 	 * @access	public
 	 * @return	string
@@ -732,7 +424,7 @@
 	 */			
 	function referrer()
 	{
-		return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? '' : $_SERVER['HTTP_REFERER'];
+		return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? '' : trim($_SERVER['HTTP_REFERER']);
 	}
 
 	// --------------------------------------------------------------------
